Asynchronous programming is increasing in popularity over synchronous programming. Synchronous programming involves specifying computations execute sequentially such that a second computation is started only after a first computation has terminated. However, synchronous programming can be problematic in light of high latency operations including file and network access as well as long running computations. In particular, with synchronous programming a program is blocked from performing additional work until a preceding computation is completed. Asynchronous programming involves specification of computation in a manner that allows additional work to be performed while a computation is executed. Upon completed execution, a program can be notified of the results by way of a callback, for example. Asynchronous programming has been resisted mainly because asynchronous programming is more difficult than synchronous programming. However, efficiency gains and the popularity of network-based applications is overcoming this resistance and tipping the scale toward asynchronous programming.